import json
from pyecharts.charts import Map
from pyecharts import options as opts

# 文件路径常量
DATA_FILE_PATH = r"D:\itheima\Python\可视化案例数据\地图数据\疫情.txt"

# 行政区划后缀映射表
REGION_SUFFIX_MAP = {
    # 直辖市
    "北京": "市",
    "天津": "市",
    "上海": "市",
    "重庆": "市",
    # 自治区
    "广西": "壮族自治区",
    "内蒙古": "自治区",
    "西藏": "自治区",
    "宁夏": "回族自治区",
    "新疆": "维吾尔自治区",
    # 特别行政区
    "香港": "特别行政区",
    "澳门": "特别行政区",
    # 默认加"省"
}

# 读取数据文件
with open(DATA_FILE_PATH, "r", encoding="utf-8") as file:
    raw_data = file.read()

# 解析JSON数据
epidemic_data = json.loads(raw_data)

# 提取各省份数据
provinces_data = epidemic_data['areaTree'][0]['children']


# 处理地区名称函数
def format_region_name(name):
    # 检查是否有特殊后缀
    if name in REGION_SUFFIX_MAP:
        return name + REGION_SUFFIX_MAP[name]
    # 默认加"省"
    return name + "省"


# 使用列表推导式构建数据列表
province_stats = [
    [format_region_name(province['name']), province['total']['confirm']]
    for province in provinces_data
]

# 创建地图图表
china_map = (
    Map(init_opts=opts.InitOpts(width="1200px", height="600px"))
    .add(
        series_name="确诊人数",
        data_pair=province_stats,
        maptype="china",
        is_map_symbol_show=False
    )
    .set_global_opts(
        title_opts=opts.TitleOpts(
            title="全国各省新冠肺炎确诊人数分布",
            subtitle="数据来源: 国家卫健委",
            pos_left="center",
        ),
        visualmap_opts=opts.VisualMapOpts(
            max_=2000,  # 根据实际数据调整
            is_piecewise=True,
            pos_left="10%",
            pos_bottom="20%",
        ),
        tooltip_opts=opts.TooltipOpts(
            trigger="item",
            formatter="{b}<br/>确诊人数: {c}"
        ),
        legend_opts=opts.LegendOpts(
            is_show=False,
        ),
    )
    .set_series_opts(label_opts=opts.LabelOpts(is_show=False))
)

# 渲染图表到HTML文件
china_map.render("china_epidemic_map.html")
print("地图生成成功，已保存为 china_epidemic_map.html")
